package com.boilermaker.lotterysystem.service.async.asynctask;

import com.boilermaker.lotterysystem.service.async.retry.RetryPolicy;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

@Component
public interface AsyncTask<T> {

    /**
     * 获取任务类型
     */
    String getTaskType();

    /**
     * 参数校验
     */
    void validate(T taskData);

    /**
     * 执行任务
     */
    void execute(T taskData);

    /**
     * 获取重试策略
     */
    default RetryPolicy getRetryPolicy() {
        return RetryPolicy.defaultPolicy();
    }

    /**
     * 任务执行后的回调
     */
    default void onComplete(T taskData, boolean success) {
    }
}
